home *** CD-ROM | disk | FTP | other *** search
- *cX TÉCNICAS VIRICAS
- *cR
- Güeno, seguimos con nuestro cursillo (ejem)
- de técnicas víricas. Este número nos dedica
- remos a una nimiedad (es que no tenía ganas
- de hacerlo muy largo), y son... ¡técnicas
- antiheurísticas!
- La verdad es que esto es bien fácil, pero
- daré algunos truquillos para que no tengais
- que pensarlos vosotros... vaguillos!
- Bien, vamos a guiarnos por las banderas del
- ThunderByte, que es uno de los mejores anti
- virus que hay (a mi juicio). Si detectamos un
- virus con este, nos dará diferentes banderas
- o "*cYflags*cR", que es lo que se intenta evitar.
- Una de las más importantes es el flag "*cLL*cR",
- que nos dice que el programa captura la
- ejecución de software. Esto lo hacen los
- virus para infectar por ejecución, como
- sabréis, y en concreto se hace esto:
- *cU
- NuevaInt21h:
- CMP AX, 4B00h ; Función en la int
- ; 21h que ejecuta un programa
- JZ InfectaPrograma
- ; Queda claro, ¿no?
- IRET ; Es así más o menos.
- *cR
- Esto, simplemente, ya revela la voluntad
- del programa en capturar la ejecución de
- programas para su infección. Pero, haciendo
- lo siguiente, se hace lo mismo:
- *cU
- NuevaInt21h:
- CMP AH, 4Ch
- JAE FinInterrupcion
- CMP AH, 4Ah
- JBE FinInterrupcion
- OR AL, AL
- JZ InfectaPrograma
- FinInterrupcion:
- IRET
- InfectaPrograma:
- ...
- *cR
- Esto hace exactamente lo mismo que el
- primer ejemplo, nada mas que, por comproba
- ción indirecta... ¡logramos evitar el flag!
- (sí, sí, ya sé que ocupa más espacio, pero
- compensa una cosa por otra).
- Otro flag bastante importante es el de la
- diferenciación en un archivo si es *cT.COM*cR
- o *cT.EXE*cR. Un virus lo hace leyendo los 2 prime
- ros bytes y mirando si son '*cZMZ*cR' o '*cZZM*cR'
- (inicio de una cabecera de EXE). Podríais
- decir: "¿Y qué tal si se hace mirando el
- nombre del archivo?". Esto conlleva proble
- mas, sobre todo por el propio DOS: el DOS no
- mira la extensión al ejecutar, sino estos dos
- primeros bytes, así que podremos tener
- un*cT .COM *cRrenombrado a *cT.EXE*cR y viceversa. Por
- tanto es más seguro hacer lo de siempre.
- El ThunderByte, ante esta técnica, nos
- marcará el flag '*cLZ*cR'. Y la solución es bien
- fácil: comprobación indirecta (¿os suena?).
- Hay un montón de maneras de hacer lo mismo
- sin que sea tan obvio nuestro objetivo. Este
- es sólo un ejemplo. Esta sería la manera
- habitual:
- *cU
- CMP WORD PTR [Los2PrimerosBytes], 'MZ'
- JZ EsunEXE
- CMP WORD PTR [Los2PrimerosBytes], 'ZM'
- JZ EsunEXE
- EsunCOM: ...
- *cR
- Y esta es una manera alternativa que evita
- la activación del flag:
- *cU
- MOV AX, [Los2PrimerosBytes]
- XOR AX, 'MZ' ; Un XOR dejará a 0 AX si
- ; éste es 'MZ'
- JZ EsunEXE
- CMP AX, 1717h ; Si fuera 'ZM', hacer
- ; una operación 'ZM' XOR
- ;'MZ' da el valor 1717h
- JZ EsunEXE
- EsunCOM: ...
- *cR
- Creo que la idea está captada, ¿no? Se
- trata de buscar otra manera de poner lo
- mismo, investigando y probando hasta que
- todos los flags comprometedores desaparezcan.
- Ahora una lista de los flags más comunes y a
- qué son debidos:
- *cK
- Flag Descripcion
- ---- -----------
-
- *cQZ*cW -->*cE El programa diferencia entre EXE
- y COM.
-
- *cR- Causa: *cTInstrucciones
- CMP XXX, 'MZ' ó CMP XXX, 'ZM'
-
- *cQL*cW --> *cE El programa captura la ejecución
- de software.
-
- *cR - Causa: *cTInstrucción CMP AH, 4Bh
- o CMP AX, 4BXXh
-
- *cQM*cW --> *cE El programa tiene código para
- quedarse residente en memoria.
-
- *cR - Causa: *cTInstrucciones de enganche
- de interrupciones por medio de la
- función 25h de la interrupción
- 21h o manipulaciones directas de
- la TVI (Tabla de Vectores de
- Interrupción).
-
- *cQA*cW --> *cE Reserva de memoria sospechosa o
- no standard
-
- *cR - Causa: *cTInstrucciones habituales
- de instalación por MCBs, que se
- ha convertido en el "standard" de
- los virus. Por ligeras variacio
- nes en estas instrucciones, se
- puede evitar el flag.
-
- *cQO*cW --> *cE Existe código para sobreescri
- bir/mover un programa en memo
- ria.
-
- *cR - Causa: *cTInstrucción
- REP MOVSB/MOVSW o reiteración
- exagerada de movimientos de
- valores a memoria.
-
- *cQ#*cW --> *cE Rutina de desencriptado o trampa
- para debuggers.
-
- *cR - Causa: *cTCódigo para desencriptar.
- El ThunderByte capta multitud de
- variaciones entre desencriptado
- res y no es fácil evitar este
- flag.
-
- *cQt*cW --> *cE Código para ser ejecutado en un
- tiempo concreto (día u hora).
-
- *cR - Causa: *cTLlamada a las funciones 02
- ó 04 de la int. 1Ah. Llamada a
- las funciones 2Ah ó 2Ch de la
- int. 21h.
-
- *cQT*cW --> *cE Tiempo incorrecto en el archivo.
-
- *cR - Causa: *cTSegundos en el archivo a
- 60-62 o años con 100 más de los
- correctos.
-
- *cQB*cW --> *cE Vuelta al punto de entrada
- después de modificaciones en él.
-
- *cR - Causa: *cTLa instrucciones habitua
- les de sobreescribir los tres
- bytes iniciales con el código
- original, que en un COM infectado
- ocupa el JMP inicial al código
- del virus.
-
- *cQF*cW --> *cE Acceso sospechoso a archivo.
-
- *cR - Causa: *cTLlamada pura y dura a la
- función 40h de la int. 21h y
- apertura por medio de la función
- 3D02h de la int. 21h.
-
- *cQU*cW --> *cE Llamada a una función o inte
- rrupción indocumentada.
-
- *cR - Causa: *cTEllo mismo. Instrucciones
- como INT 7Ah, o la función 0FEh
- de la int. 21h, etc.
-
- *cQS*cW --> *cE Rutina de búsqueda de ejecuta
- bles.
-
- *cR - Causa: *cTLlamada a las funciones
- 4Eh y 4Fh de la int. 21h con DX
- apuntando a la cadena '*.EXE' o
- '*.COM', o simplemente estas
- cadenas.
-
- *cQX*cW --> *cE Capacidades stealth.
-
- *cR - Causa: *cTExactamente, las instruc
- ciones "CMP AH,11h", "CMP
- AH,12h", "CMP AH, 4Eh" y "CMP AH,
- 4Fh", así como los pares de
- instrucciones "SUB WORD PTR
- [Dir], Val / SBB WORD PTR
- [Dir+2], +00".
-
- *cR
- Bien, y aquí se acaba por este número (que
- ya es bastante, co*o*es). Al próximo, más...
- ¿y qué veremos en el próximo número? Pues no
- lo sé, ya se me ocurrirá algo.
- *cM
- Líyak el Oscuro
-
-